/*

* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
* |     Smart-Shop开源商城系统/ Java商城-首选电商平台系统 请务必保留此注释头信息
* |     开源地址: https://gitee.com/ningbo-qishan/gruul-mall
* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
* |     可正常分享和学习源码,未经授权 不可商用！
* |     商业版中台购买/开源版商业授权 联系技术客服
* |     官网:  https://www.73app.cn/
* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
* |     Copyright (c) 2016-2999 宁波启山智软科技有限公司
* |     版权所有 ,侵权必究！
* ------------------------------------------------------------------------

*/
package com.medusa.gruul.common.core.auth.client.helper;

import cn.hutool.core.util.StrUtil;
import com.medusa.gruul.common.core.exception.ServiceException;
import com.medusa.gruul.common.core.util.SystemCode;

/**
 * 可以控制是否为空
 *
 * @author 张治保
 * date 2021/12/7
 */
public class S<T> {

    private final T data;

    private S(T data){
        this.data = data;
    }

    public static <T> S<T> of(T data) {
        return new S<>(data);
    }

    /**
     * 可以为空值
     */
    public T can() {
        return data;
    }

    /**
     * 必须有值
     */
    public T must() {
        return must(
            new ServiceException("当前上下文中没有取到值",SystemCode.NOT_FOUND_CODE)
        );
    }

    /**
     * 必须有值
     */
    public T must(RuntimeException exception) {
        if (data == null ){
            throw exception;
        }
        if ((data instanceof String && StrUtil.isBlank((String) data))){
            throw exception;
        }
        return data;
    }

}
